package org.example.fancystudy.Lock;

import java.util.concurrent.TimeUnit;

/**
 * @author chaigq
 * @version 1.0
 * @date 2022/11/9 09:56
 */
class Phone{
    //public synchronized void sendEmail(){
    // 第5种
    public static synchronized void sendEmail(){
        try {
            TimeUnit.SECONDS.sleep(3);
            System.out.println("sendEmail");
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }

    public synchronized void sendSMS(){
        System.out.println("sendSMS");
    }

    public void hello(){
        System.out.println("Hello!");
    }
}
/**
 *  场景：
 *  * 1 标准访问有ab两个线程，请问先打印邮件还是短信
 *  打印结果：sendEmail sendSMS
 *  * 2 sendEmail方法中加入暂停3秒钟，请问先打印邮件还是短信
 *  打印结果：sendEmail sendSMS
 *  * 3 添加一个普通的hello方法，请问先打印邮件还是hello
 *  打印结果：Hello sendEmail
 *  * 4 有两部手机，请问先打印邮件还是短信
 *  打印结果：sendSMS sendEmail
 *  * 5 有两个静态同步方法，有1部手机，请问先打印邮件还是短信
 *  印结果：sendEmail sendSMS
 *  * 6 有两个静态同步方法，有2部手机，请问先打印邮件还是短信
 *  印结果：sendEmail sendSMS
 *  * 7 有1个静态同步方法，有1个普通同步方法,有1部手机，请问先打印邮件还是短信
 *  印结果：sendSMS sendEmail
 *  * 8 有1个静态同步方法，有1个普通同步方法,有2部手机，请问先打印邮件还是短信
 *
 */
public class LockDemo {

    public static void main(String[] args) {
        Phone phone = new Phone();
        Phone phone2 = new Phone();
        new Thread(() -> {
            phone.sendEmail();
        }).start();

        try {
            TimeUnit.MILLISECONDS.sleep(200);
        }catch (InterruptedException e){
            e.printStackTrace();
        }

        new Thread(() -> {
            // 第一种情况
            phone2.sendSMS();
        }).start();
    }
}


